#![allow(unused_imports, non_snake_case, non_camel_case_types)]
use super::windows::*;
use super::*;

#[repr(C)]
pub struct IDWriteFontVtbl {
	pub parent: IUnknownVtbl,
	pub GetFontFamily: unsafe extern "system" fn(This: *mut IDWriteFont, fontFamily: *mut *mut IDWriteFontFamily) -> HRESULT,
	pub GetWeight: unsafe extern "system" fn(This: *mut IDWriteFont) -> DWRITE_FONT_WEIGHT,
	pub GetStretch: unsafe extern "system" fn(This: *mut IDWriteFont) -> DWRITE_FONT_STRETCH,
	pub GetStyle: unsafe extern "system" fn(This: *mut IDWriteFont) -> DWRITE_FONT_STYLE,
	pub IsSymbolFont: unsafe extern "system" fn(This: *mut IDWriteFont) -> BOOL,
	pub GetFaceNames: unsafe extern "system" fn(This: *mut IDWriteFont, names: *mut *mut IDWriteLocalizedStrings) -> HRESULT,
	pub GetInformationalStrings: unsafe extern "system" fn(This: *mut IDWriteFont, informationalStringId: DWRITE_INFORMATIONAL_STRING_ID, informationalStrings: *mut *mut IDWriteLocalizedStrings, exists: *mut BOOL) -> HRESULT,
	pub GetSimulations: unsafe extern "system" fn(This: *mut IDWriteFont) -> DWRITE_FONT_SIMULATIONS,
	pub GetMetrics: unsafe extern "system" fn(This: *mut IDWriteFont, fontMetrics: *mut DWRITE_FONT_METRICS) -> (),
	pub HasCharacter: unsafe extern "system" fn(This: *mut IDWriteFont, unicodeValue: UINT32, exists: *mut BOOL) -> HRESULT,
	pub CreateFontFace: unsafe extern "system" fn(This: *mut IDWriteFont, fontFace: *mut *mut IDWriteFontFace) -> HRESULT,
}
#[repr(C)]
pub struct IDWriteFont {
	pub lpVtbl: *const IDWriteFontVtbl,
}
impl IDWriteFont {
	#[inline]
	pub unsafe fn GetFontFamily(&self, fontFamily: *mut *mut IDWriteFontFamily) -> HRESULT {
		((*self.lpVtbl).GetFontFamily)(self as *const _ as *mut _, fontFamily)
	}
	#[inline]
	pub unsafe fn GetWeight(&self) -> DWRITE_FONT_WEIGHT {
		((*self.lpVtbl).GetWeight)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetStretch(&self) -> DWRITE_FONT_STRETCH {
		((*self.lpVtbl).GetStretch)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetStyle(&self) -> DWRITE_FONT_STYLE {
		((*self.lpVtbl).GetStyle)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn IsSymbolFont(&self) -> BOOL {
		((*self.lpVtbl).IsSymbolFont)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetFaceNames(&self, names: *mut *mut IDWriteLocalizedStrings) -> HRESULT {
		((*self.lpVtbl).GetFaceNames)(self as *const _ as *mut _, names)
	}
	#[inline]
	pub unsafe fn GetInformationalStrings(&self, informationalStringId: DWRITE_INFORMATIONAL_STRING_ID, informationalStrings: *mut *mut IDWriteLocalizedStrings, exists: *mut BOOL) -> HRESULT {
		((*self.lpVtbl).GetInformationalStrings)(self as *const _ as *mut _, informationalStringId, informationalStrings, exists)
	}
	#[inline]
	pub unsafe fn GetSimulations(&self) -> DWRITE_FONT_SIMULATIONS {
		((*self.lpVtbl).GetSimulations)(self as *const _ as *mut _)
	}
	#[inline]
	pub unsafe fn GetMetrics(&self, fontMetrics: *mut DWRITE_FONT_METRICS) -> () {
		((*self.lpVtbl).GetMetrics)(self as *const _ as *mut _, fontMetrics)
	}
	#[inline]
	pub unsafe fn HasCharacter(&self, unicodeValue: UINT32, exists: *mut BOOL) -> HRESULT {
		((*self.lpVtbl).HasCharacter)(self as *const _ as *mut _, unicodeValue, exists)
	}
	#[inline]
	pub unsafe fn CreateFontFace(&self, fontFace: *mut *mut IDWriteFontFace) -> HRESULT {
		((*self.lpVtbl).CreateFontFace)(self as *const _ as *mut _, fontFace)
	}
}
impl core::ops::Deref for IDWriteFont {
	type Target = IUnknown;
	#[inline]
	fn deref(&self) -> &IUnknown {
		unsafe { &*(self as *const IDWriteFont as *const IUnknown) }
	}
}
impl Interface for IDWriteFont {
	#[inline]
	fn uuidof() -> GUID {
		GUID { Data1: 0xacd16696, Data2: 0x8c14, Data3: 0x4f5d, Data4: [0x87, 0x7e, 0xfe, 0x3f, 0xc1, 0xd3, 0x27, 0x37] }
	}
}
